Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

207
Visualizações
¿Cómo "unir internamente" dos matrices mediante una clave en javascript?

Tengo dos matrices que contienen objetos así:

 const array1 = [ { "id": 1, "mass": 149, "height": 180, "dob": "2003-09-04" }, { "id": 2, "mass": 140, "height": 175, "dob": "2000-02-12", }, { "id": 3, "mass": 143, "height": 170, "dob": "2001-11-04" } ] const array2 = [ { "id": 1, "name": "James", "sport": "Football" }, { "id": 2, "name": "Adam", "sport": "Tennis" } ]

Me gustaría fusionarlos de manera que una matriz combinada solo contenga datos donde la id aparece tanto en la matriz1 como en la matriz2.

Hasta ahora estoy usando lodash _.merge que devuelve:

 const merged = _.merge(array1, array2) merged = [ { "id": 1, "mass": 149, "height": 180, "dob": "2003-09-04", "name": "James", "sport": "Football" }, { "id": 2, "mass": 140, "height": 175, "dob": "2000-02-12", "name": "Adam", "sport": "Tennis" }, { "id": 3, "mass": 143, "height": 170, "dob": "2001-11-04" , } ]

Me gustaría merged para contener datos donde la id aparece en ambos, es decir:

 [{ "id": 1, "mass": 149, "height": 180, "dob": "2003-09-04", "name": "James", "sport": "Football" }, { "id": 2, "mass": 140, "height": 175, "dob": "2000-02-12", "name": "Adam", "sport": "Tennis" }]

Creo que la función equivalente en algo como SQL sería una "unión interna"

¡Cualquier ayuda sería muy apreciada!

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Necesita mapearlos de uno a otro. Idea básica usando reduce donde rastreamos el artículo por la identificación.

 const array1 = [{ "id": 1, "mass": 149, "height": 180, "dob": '2003-09-04' }, { "id": 2, "mass": 140, "height": 175, "dob": '2000-02-12', }, { "id": 3, "mass": 143, "height": 170, "dob": '2001-11-04' } ] const array2 = [{ "id": 1, "name": "James", "sport": "Football" }, { "id": 2, "name": "Adam", "sport": "Tennis" } ] const result = Object.values([...array1, ...array2].reduce((acc, userData) => { // have you seen the id before? If yes, use it, if no use and empty object const data = acc[userData.id] || {}; //merge the objects together and store the updated data by the id acc[userData.id] = { ...data, ...userData }; return acc }, {})); console.log(result);

Ahora eso incluirá todo. Si solo desea los elementos que están en ambos, puede hacerlo en dos bucles.

 const array1 = [{ "id": 1, "mass": 149, "height": 180, "dob": '2003-09-04' }, { "id": 2, "mass": 140, "height": 175, "dob": '2000-02-12', }, { "id": 3, "mass": 143, "height": 170, "dob": '2001-11-04' } ] const array2 = [{ "id": 1, "name": "James", "sport": "Football" }, { "id": 2, "name": "Adam", "sport": "Tennis" } ] // create a look up by the id const array1MappedById = array1.reduce((acc, userData) => { acc[userData.id] = userData; return acc }, {}); // Loop over the second array and make a new array with the merged data const result = array2.reduce((arr, userData) => { const array1Data = array1MappedById[userData.id]; // if the data exists in the map, then we should merge the data if (array1Data) { arr.push({...array1Data, ...userData}); } return arr; }, []); console.log(result);

about 4 years ago · Juan Pablo Isaza Relatório

0

Puede filtrar su primera matriz con Array.filter para incluir solo los objetos que están presentes en su segunda matriz antes de realizar la misma combinación.

 let merged = array1.filter(e => array2.some(f => f.id == e.id)); 

 const array1 = [ { "id": 1, "mass": 149, "height": 180, "dob": 2003-09-04 }, { "id": 2, "mass": 140, "height": 175, "dob": 2000-02-12, }, { "id": 3, "mass": 143, "height": 170, "dob": 2001-11-04 } ] const array2 = [ { "id": 1, "name": "James", "sport": "Football" }, { "id": 2, "name": "Adam", "sport": "Tennis" } ] let merged = array1.filter(e => array2.some(f => f.id == e.id)); merged = _.merge(merged, array2); console.log(merged);
 <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>

about 4 years ago · Juan Pablo Isaza Relatório

0

esto fusionará los datos donde la identificación es la misma identificación

 const merged = array2.reduce((arr, current) => { let array1Data = {...array1}[current.id]; if (array1Data) { arr.push({...array1Data, ...current}); } return arr; }, []); console.log(merged);
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda